อัพเดทบริการ Amazon Rekognition ในปี 2024
บทความนี้แปลมาจากบทความที่เป็นภาษาญี่ปุ่นที่ชื่อว่า AWS入門ブログリレー2024〜Amazon Rekognition編〜 โดยเจ้าของบทความนี้คือ คุณ たぬき
Amazon Rekognition คืออะไร
Amazon Rekognition คือบริการ Machine learning แบบ full-managed สำหรับการจดจำภาพและวิดีโอ
หากสรุปคุณสมบัติอย่างง่าย จะมีดังนี้
- สามารถใช้โมเดล Machine learning ที่ AWS เตรียมไว้ล่วงหน้าได้
- สามารถฝึกฝนข้อมูลที่เตรียมเองและสร้างโมเดลเฉพาะตัวได้
- คิดค่าบริการตามการใช้งาน (ค่าบริการสำหรับบริการที่เชื่อมต่อกับ Rekognition จะถูกคิดแยกต่างหาก)
และ AWS rekognition ยังมีฟังก์ชันให้ใช้งานตามแต่ละลักษณะงานตามนี้
- Face image matching
- Face image search
- Label detection
- Moderation (harm detection)
- Face detection and analysis
- Text detection in images
- Celebrity recognition
- PPE detection
- Image property analysis
คำแนะนำเกี่ยวกับการตั้งค่าภาพและวิดีโอที่ใช้กับ Rekognition
คำแนะนำเกี่ยวกับการตั้งค่าภาพและวิดีโอที่ใช้กับ Rekognition ได้ถูกรวบรวมไว้ในเอกสารแล้ว
Best practices for sensors, input images, and videos
ในบล็อกนี้ จะมีการเปรียบเทียบใบหน้าที่ลงทะเบียนใน Custom Collection กับไฟล์ภาพ และเมื่อดูจากคำแนะนำแล้ว ภาพถ่ายที่มีลักษณะคล้ายกับภาพถ่ายบัตรประจำตัวน่าจะเป็นตัวเลือกที่ดีที่สุด
โดยในบทความนี้จะทดสอบด้วยการนำใบหน้าบุคคลไปเปรียบเทียบกับรูปภาพหน้าบุคคลที่ได้ลงทะเบียนไว้ใน Custom Collection
นอกจากนี้ สำหรับภาพที่ใช้กับ Rekognition จำเป็นต้องเป็นข้อมูลภาพที่จัดเก็บไว้ใน S3 bucket หรือเป็น string ที่เข้ารหัสด้วย Base64
นอกจากนี้ไฟล์ภาพที่อยู่ใน EC2 หรือที่อื่น ๆ ไม่สามารถนำมาใช้งานได้โดยตรง
Custom Collection
Rekognition สามารถแปลงภาพใบหน้าที่ป้อนเข้าไปเป็นข้อมูล และจัดเก็บในรูปแบบข้อมูลที่เรียกว่า "Face Vector"
นอกจากนี้ user ที่เชื่อมโยงกับ Face Vector จะถูกเรียกว่า "User Vector" และเมื่อเชื่อมโยง Face Vector กับ User Vector ข้อมูลใบหน้าของบุคคลหนึ่งคนจะถูกสร้างขึ้นอย่างสมบูรณ์
Custom Collection คือกล่องที่ใช้จัดเก็บ Face Vector และ User Vector
เนื่องจากข้อมูลที่ลงทะเบียนใน Custom Collection จะถูกจัดเก็บในเซิร์ฟเวอร์แบบ full-managed ที่ดูแลโดย AWS ดังนั้น user จึงไม่สามารถดำเนินการโดยตรงกับเซิร์ฟเวอร์ที่จัดการได้
ปัจจุบัน การทำสำเนา Face Vector และ User Vector ที่จัดเก็บไว้ในแต่ละ Collection ยังไม่สามารถทำได้
หากต้องการสร้าง Custom Collection ที่มีข้อมูลเดียวกันในบัญชีอื่น จำเป็นต้องสร้าง Custom Collection ใหม่โดยใช้ข้อมูลเดียวกัน
นอกจากนี้ ในกรณีที่เป็น Use Case ที่เกี่ยวข้องกับการสนับสนุนความปลอดภัยสาธารณะ รวมถึงการป้องกันอาชญากรรมและการติดตามผู้สูญหาย ซึ่งครอบคลุมถึงการใช้งานในด้านกฎหมาย จำเป็นต้องปฏิบัติตาม Best Practices ของ Rekognition อย่างเคร่งครัด
แม้ว่าอาจจะเป็นกรณีการใช้งานที่จำกัด แต่ขอแนะนำให้ตรวจสอบว่าใช้กับกรณีการใช้งานใดบ้าง
(เนื่องจากอาจมีการแก้ไขเอกสาร จึงจะไม่สรุปเนื้อหาในบทความนี้ โปรดอ้างอิงจากเอกสารทางการโดยตรง)
Use cases that involve public safety
ค่าใช้จ่าย
- ค่าธรรมเนียมในการเรียกใช้ API
ในกรณีของ API ที่สามารถประมวลผลหลายรูปภาพได้ในคำสั่งเดียว ค่าธรรมเนียมที่เกิดขึ้นจะขึ้นอยู่กับจำนวนรูปภาพที่ถูกประมวลผล
API | ไม่เกิน 1,000,000 รูปภาพ | 1,000,001 ~ 4,000,000 รูปภาพ | 4,000,001~30,000,000 รูปภาพ | มากกว่า 35,000,000 รูปภาพ |
---|---|---|---|---|
AssociateFaces CompareFaces DisassociateFaces IndexFaces SearchFacesbyImage SearchFaces SearchUsersByImage SearchUsers |
0.0013USD | 0.001USD | 0.0008USD | 0.0005USD |
DetectFaces DetectModerationLabels DetectLabels DetectText RecognizeCelebrities DetectPPE |
0.0013USD | 0.001USD | 0.0008USD | 0.0003125USD |
Image Properties | 0.000975USD | 0.00075USD | 0.0006USD | 0.0002344USD |
- ค่าธรรมเนียมการจัดเก็บข้อมูลสำหรับ Custom Collection
FaceID และ UserID มีการคิดค่าธรรมเนียมแยกต่างหาก
ฟังก์ชัน | ค่าธรรมเนียม |
---|---|
Face Vector Storage | 0.000013 USD ต่อ face metadata ต่อเดือน |
User Vector Storage | 0.000013 USD ต่อ face metadata เดือน |
ดังนั้น ค่าธรรมเนียมการจัดเก็บข้อมูลรายเดือนสำหรับ user 1 คนและข้อมูลใบหน้า 5 รูปที่สร้างขึ้นในการทดสอบครั้งนี้จะอยู่ที่ 0.000078 USD
อ้างอิง : ค่าบริการ Amazon Rekognition
ทดลองใช้งาน
ลองทดสอบฟังก์ชัน Face comparison ของ Rekognition โดยเราจะลงทะเบียนภาพ 5 ภาพใน Custom Collection และทำการเปรียบเทียบกับภาพถ่ายที่ถ่ายในวันอื่น
ขั้นตอนการสร้างมีดังนี้
- สร้าง S3 bucket สำหรับการทดสอบ
- สร้าง Custom Collection ใน Rekognition
- เปรียบเทียบภาพถ่าย
เนื่องจากครั้งนี้ต้องการทดสอบอย่างรวดเร็ว เราจะทำการทดสอบโดยใช้ AWS CLI ผ่าน AWS CloudShell
AWS CLI ได้ถูกติดตั้งล่วงหน้าใน CloudShell แล้ว ดังนั้นเพียงแค่เปิดใช้งาน คุณก็สามารถดำเนินการทดสอบนี้ได้ทันที
โดยวิธีการใช้ CloudShell สามารถดูได้ที่นี่
ข้อจำกัดในการใช้ Rekognition ผ่าน AWS CLI คือ คุณสามารถเลือกภาพที่จัดเก็บอยู่ใน S3 เท่านั้น
IAM permission ที่จำเป็นสำหรับการทดสอบ
สำหรับการทดสอบนี้ จำเป็นต้องมีสิทธิ์ IAM user role เพื่อใช้งาน
- AWSCloudShellFullAccess
- AmazonS3FullAccess
- AmazonRekognitionFullAccess
เนื่องจากการสร้าง การลงทะเบียนภาพ และการทดสอบจะดำเนินการด้วย role เดียวกัน จึงจำเป็นต้องมีสิทธิ์ FullAccess สำหรับ S3 และ Rekognition อย่างไรก็ตาม ในการใช้งานจริง ขอแนะนำอย่างยิ่งให้จำกัดสิทธิ์ให้เหลือเพียง least privilege เท่านั้น
สร้าง S3 bucket สำหรับการทดสอบ
ก่อนอื่นเราจะสร้าง S3 bucket สำหรับใส่ภาพที่ใช้ในการทดสอบ
ในครั้งนี้ เราจะจัดเก็บภาพที่ลงทะเบียนใน Custom Collection และภาพที่ใช้สำหรับการเปรียบเทียบไว้ใน S3 bucket เดียวกัน
S3 bucket ถูกสร้างขึ้นโดยใช้การตั้งค่าเริ่มต้นทั้งหมด
เพื่อให้ง่ายต่อการเข้าใจ เราได้แยกภาพที่ลงทะเบียนใน collection ออกมาไว้ในโฟลเดอร์ชื่อ "Collection"
สร้าง Custom Collection ใน Rekognition
จากตรงนี้ เราจะเริ่มดำเนินการโดยใช้ CloudShell
1. สร้าง collection
collection-id: ชื่อ collection ที่ต้องการสร้าง
region: ชื่อภูมิภาคที่ต้องการสร้าง collection ซึ่งต้องตรงกับภูมิภาคที่สร้าง S3 bucket
aws rekognition create-collection --region ap-southeast-1 --collection-id "test-rekognition-SearchUsers"
หากได้รับ Status Code 200 กลับมา แสดงว่าการสร้าง collection สำเร็จแล้ว
สามารถใช้คำสั่ง list เพื่อตรวจสอบ collection ที่สร้างขึ้นได้
aws rekognition list-collections
2. เพิ่ม face vector ใน collection
FaceID ที่เพิ่มในขั้นตอนนี้จะถูกใช้ในการเชื่อมโยงกับ user ดังนั้นโปรดจดบันทึกไว้
Bucket: ชื่อ S3 bucket
Name: คีย์ของไฟล์ภาพที่ลงทะเบียนใน collection ที่กำหนดเอง
collection-id: ชื่อ collection
external-image-id: คุณสามารถกำหนด "ExternalImageId" ให้กับใบหน้าที่ Rekognition ตรวจพบได้ตามต้องการ
แนะนำให้ตั้งค่า ExternalImageId ให้เป็นค่าเฉพาะสำหรับแต่ละบุคคล เนื่องจากสามารถใช้ในการระบุ Face Vector ก่อนที่จะเชื่อมโยงกับ User Vector ได้
หากลืมจดบันทึก FaceID ในขั้นตอนนี้ การลงทะเบียน ExternalImageId จะช่วยให้คุณสามารถระบุใบหน้าได้
อย่างที่เห็นในผลการลงทะเบียนที่กล่าวถึงในภายหลัง หากไม่มี ExternalImageId ข้อมูลการลงทะเบียนเพียงอย่างเดียวจะไม่สามารถระบุได้ว่าเจ้าของ Face Vector เป็นใคร
สามารถตรวจสอบคีย์ของไฟล์ภาพได้จาก S3
aws rekognition index-faces --image '{"S3Object":{"Bucket":"patarapong.data","Name":"Collection/collection_1.jpg"}}' \
--collection-id "test-rekognition-SearchUsers" \
--max-faces 1 --quality-filter "AUTO" --detection-attributes "ALL" \
--external-image-id "patarapong" --region ap-southeast-1
เมื่อรันคำสั่งนี้ ใบหน้าที่อยู่ในภาพจะถูกลงทะเบียนเป็นข้อมูล
โดยข้อมูลที่ถูกวิเคราะห์ในระหว่างการลงทะเบียนจะถูกแสดงออกมา
ผลลัพธ์ที่ได้จะยาวมาก ดังนั้นขอปิดไว้ก่อน
นอกจากนี้ ยังมีการวิเคราะห์การแสดงออกทางสีหน้าด้วย ซึ่งค่า CALM สูง แสดงให้เห็นถึงความเป็นคนที่สงบเสงี่ยม
ผลลัพธ์
{ "FaceRecords": [ { "Face": { "FaceId": "7d07e6d8-e83a-4da8-8c5b-ccbea9771776", "BoundingBox": { "Width": 0.4228259325027466, "Height": 0.4402247369289398, "Left": 0.28059130907058716, "Top": 0.20509935915470123 }, "ImageId": "28e2c8ec-d509-3bfd-9d1c-1992ea142632", "ExternalImageId": "patarapong", "Confidence": 99.99989318847656 }, "FaceDetail": { "BoundingBox": { "Width": 0.4228259325027466, "Height": 0.4402247369289398, "Left": 0.28059130907058716, "Top": 0.20509935915470123 }, "AgeRange": { "Low": 20, "High": 26 }, "Smile": { "Value": false, "Confidence": 95.71143341064453 }, "Eyeglasses": { "Value": false, "Confidence": 99.95034790039062 }, "Sunglasses": { "Value": false, "Confidence": 99.9730224609375 }, "Gender": { "Value": "Male", "Confidence": 97.04512786865234 }, "Beard": { "Value": false, "Confidence": 99.76892852783203 }, "Mustache": { "Value": false, "Confidence": 99.94725036621094 }, "EyesOpen": { "Value": true, "Confidence": 99.95702362060547 }, "MouthOpen": { "Value": false, "Confidence": 99.89968872070312 }, "Emotions": [ { "Type": "CALM", "Confidence": 95.1171875 }, { "Type": "HAPPY", "Confidence": 0.96282958984375 }, { "Type": "DISGUSTED", "Confidence": 0.218963623046875 }, { "Type": "CONFUSED", "Confidence": 0.12151399999856949 }, { "Type": "SAD", "Confidence": 0.07987022399902344 }, { "Type": "SURPRISED", "Confidence": 0.06181001663208008 }, { "Type": "ANGRY", "Confidence": 0.047135353088378906 }, { "Type": "FEAR", "Confidence": 0.003018975257873535 } ], "Landmarks": [ { "Type": "eyeLeft", "X": 0.36305058002471924, "Y": 0.3748568296432495 }, { "Type": "eyeRight", "X": 0.54229336977005, "Y": 0.38581791520118713 }, { "Type": "mouthLeft", "X": 0.3741970658302307, "Y": 0.5316291451454163 }, { "Type": "mouthRight", "X": 0.523902177810669, "Y": 0.5413281321525574 }, { "Type": "nose", "X": 0.4176405072212219, "Y": 0.47080376744270325 }, { "Type": "leftEyeBrowLeft", "X": 0.30936428904533386, "Y": 0.3324061930179596 }, { "Type": "leftEyeBrowRight", "X": 0.3905144929885864, "Y": 0.3335152566432953 }, { "Type": "leftEyeBrowUp", "X": 0.34492066502571106, "Y": 0.3211028575897217 }, { "Type": "rightEyeBrowLeft", "X": 0.4929317235946655, "Y": 0.3389299213886261 }, { "Type": "rightEyeBrowRight", "X": 0.62061607837677, "Y": 0.3502536416053772 }, { "Type": "rightEyeBrowUp", "X": 0.5512574911117554, "Y": 0.3322815001010895 }, { "Type": "leftEyeLeft", "X": 0.33537381887435913, "Y": 0.3713512420654297 }, { "Type": "leftEyeRight", "X": 0.3986812233924866, "Y": 0.378425270318985 }, { "Type": "leftEyeUp", "X": 0.3610067665576935, "Y": 0.3673950731754303 }, { "Type": "leftEyeDown", "X": 0.3635462820529938, "Y": 0.3817521929740906 }, { "Type": "rightEyeLeft", "X": 0.5068324208259583, "Y": 0.38487708568573 }, { "Type": "rightEyeRight", "X": 0.5782185196876526, "Y": 0.3859398663043976 }, { "Type": "rightEyeUp", "X": 0.5408979058265686, "Y": 0.3781187832355499 }, { "Type": "rightEyeDown", "X": 0.5410674810409546, "Y": 0.39252012968063354 }, { "Type": "noseLeft", "X": 0.4034983217716217, "Y": 0.48108214139938354 }, { "Type": "noseRight", "X": 0.4698360562324524, "Y": 0.48487913608551025 }, { "Type": "mouthUp", "X": 0.4329344928264618, "Y": 0.5205228924751282 }, { "Type": "mouthDown", "X": 0.43641752004623413, "Y": 0.5662908554077148 }, { "Type": "leftPupil", "X": 0.36305058002471924, "Y": 0.3748568296432495 }, { "Type": "rightPupil", "X": 0.54229336977005, "Y": 0.38581791520118713 }, { "Type": "upperJawlineLeft", "X": 0.3087298572063446, "Y": 0.360513836145401 }, { "Type": "midJawlineLeft", "X": 0.33437323570251465, "Y": 0.5317671298980713 }, { "Type": "chinBottom", "X": 0.44877904653549194, "Y": 0.6434420347213745 }, { "Type": "midJawlineRight", "X": 0.651491641998291, "Y": 0.5493217706680298 }, { "Type": "upperJawlineRight", "X": 0.699161946773529, "Y": 0.3819434344768524 } ], "Pose": { "Roll": 1.328561782836914, "Yaw": -13.852458953857422, "Pitch": -0.10378935188055038 }, "Quality": { "Brightness": 76.2990951538086, "Sharpness": 97.45164489746094 }, "Confidence": 99.99989318847656, "FaceOccluded": { "Value": false, "Confidence": 99.5072021484375 }, "EyeDirection": { "Yaw": 3.5584752559661865, "Pitch": -9.32666015625, "Confidence": 99.9997329711914 } } } ], "FaceModelVersion": "7.0", "UnindexedFaces": [] } (END)
ทำซ้ำขั้นตอนนี้ตามจำนวนภาพที่ต้องการลงทะเบียน
3. สร้าง User Vector ใน collection
UserID ที่เพิ่มในขั้นตอนนี้จะถูกใช้ในการเชื่อมโยงกับใบหน้าที่ลงทะเบียนไว้ก่อนหน้านี้ ดังนั้นโปรดบันทึกไว้ให้ดี
สำหรับ Token ในครั้งนี้ เรากำหนดค่าเป็นค่าคงที่ด้วยตนเอง แต่ถ้าคุณต้องการสร้าง user หลายคน ควรกำหนด string ที่แตกต่างกันสำหรับแต่ละคน
collection-id: ชื่อ collection
user-id: UserID ที่ไม่ซ้ำกันสำหรับ user ที่ต้องการสร้าง
client-request-token: token ที่เป็น string (^[a-zA-Z0-9-_]+$) ซึ่งใช้เพื่อป้องกันไม่ให้ request เดียวกันถูกประมวลผลหลายครั้ง
aws rekognition create-user --user-id user0 --collection-id test-rekognition-SearchUsers --region ap-southeast-1 \
--client-request-token test000
หลังจากรันคำสั่งแล้ว จะไม่มีผลลัพธ์ใด ๆ แสดงออกมา ดังนั้นลองใช้คำสั่ง list เพื่อตรวจสอบดู
aws rekognition list-users --collection-id test-rekognition-SearchUsers
4. เชื่อมโยง User Vector กับ Face Vector ID
ก่อนอื่น ให้ตรวจสอบ FaceID
ในขั้นตอนนี้ เราจะใช้ ExternalImageId ที่แนะนำให้กำหนดไว้ก่อนหน้านี้
aws rekognition list-faces --collection-id test-rekognition-SearchUsers | jq '.Faces[] | select( .ExternalImageId == "patarapong") | .FaceId'
หลังจากนี้ เพียงแค่เชื่อมโยง FaceID ที่ได้จากการตรวจสอบกับ UserID
สามารถระบุ face-ids หลายรายการพร้อมกันได้โดยการคั่นด้วยช่องว่าง(space)
aws rekognition associate-faces --user-id user0 \
--face-ids 1a470879-44fa-44fe-9bf5-a3985c09eb89 7d07e6d8-e83a-4da8-8c5b-ccbea9771776 851723da-7f94-4c8e-be62-40b6c2bef6d8 c5ea06be-8806-4fd4-aa54-5aefc833fe91 e276ea06-8957-41a9-9b27-0815f96d953e \
--collection-id test-rekognition-SearchUsers --region ap-southeast-1
การแสดงรายการ FaceId จะช่วยให้ตรวจสอบได้ว่า FaceId ถูกเชื่อมโยงกับ UserID อย่างถูกต้องหรือไม่
aws rekognition list-faces --collection-id test-rekognition-SearchUsers
เพียงเท่านี้ การเตรียม Custom Collection ก็เสร็จสมบูรณ์
ทดสอบ
ลองค้นหา user ใน collection ที่กำหนดเองโดยใช้ภาพถ่ายสำหรับการเปรียบเทียบ
API ที่ใช้คือ SearchUsersByImage
API นี้จะคืนค่า UserID โดยเรียงตามลำดับจากความสอดคล้องของ Face Vector ของภาพที่ระบุกับ Face Vector ที่ลงทะเบียนใน collection ที่กำหนดเอง
Searching for users (image) - Amazon Rekognition
Face Vector ที่เพิ่มใน collection ทั้งหมดเป็นภาพของคนคนเดียวกัน แต่ใช้ภาพที่มีทรงผมแตกต่างกันในแต่ละภาพ
Name: คีย์ของไฟล์ภาพที่ต้องการใช้ค้นหาใบหน้า
aws rekognition search-users-by-image --image '{"S3Object":{"Bucket":"patarapong.data","Name":"test.jpg"}}' \
--collection-id test-rekognition-SearchUsers --region ap-southeast-1
ความสอดคล้องกับ user0 อยู่ที่ "99.99303436279297"
หากความสอดคล้องเกิน 99% ก็สามารถกล่าวได้ว่ามีความแม่นยำสูงและเป็นบุคคลเดียวกัน
ลบ resource
สำหรับ API จะมีค่าใช้จ่ายตามการใช้งาน แต่ Custom Collection หากปล่อยไว้จะมีค่าใช้จ่ายในการเก็บข้อมูล ดังนั้นหากไม่มีแผนที่จะใช้งานต่อในอนาคต ควรลบออก
aws rekognition delete-collection --collection-id test-rekognition-SearchUsers
หากได้รับ Status Code 200 กลับมา แสดงว่าการลบเสร็จสมบูรณ์แล้ว
สรุป
Amazon Rekognition เป็นบริการ Machine learning ของทาง AWS ที่ถนัดทางด้านภาพและวิดีโอ ซึ่งในบทความนี้ เราได้ทดลองใช้บริการนี้เพื่อจำแนกบุคคุลโดยป้อนรูปภาพบุคคลให้กับ Amazon Rekognition ก่อน แล้วจึงทดสอบจำแนกรูปภาพบุคคลนั้นๆ เป็นบริการที่น่าสนใจมากๆในการใช้ AI เพื่อมาจำแนกความแตกต่างจากรูปภาพและวิดีโอได้